package com.example.myapplication10_2;

import android.graphics.Color;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

import java.lang.reflect.Method;

public class MainActivity extends AppCompatActivity {

    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 找到布局文件中的 TextView
        textView = findViewById(R.id.textView);
        // 为 TextView 注册上下文菜单
        registerForContextMenu(textView);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        try {
            // 调用反射方法设置菜单图标可见
            setIconEnable(menu, true);
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 设置菜单标题
        menu.setHeaderTitle(R.string.menu_title);
        // 设置菜单标题图标
        menu.setHeaderIcon(R.drawable.icon1);
        // 添加菜单项
        MenuItem redItem = menu.add(0, 100, 0, R.string.red_bg);

        MenuItem blueItem = menu.add(0, 101, 0, R.string.blue_bg);

        MenuItem orangeItem = menu.add(0, 102, 0, R.string.orange_bg);

        MenuItem whiteItem = menu.add(0, 103, 0, R.string.white_bg);

    }

    // 反射方法，用于设置菜单图标可见
    private void setIconEnable(Menu menu, boolean enable) throws Exception {
        // 获取 MenuBuilder 类
        Class<?> clazz = Class.forName("com.android.internal.view.menu.MenuBuilder");
        // 获取 setOptionalIconsVisible 方法
        Method m = clazz.getDeclaredMethod("setOptionalIconsVisible", boolean.class);
        // 设置方法可访问
        m.setAccessible(true);
        // 调用方法设置图标可见性
        m.invoke(menu, enable);
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case 100:
                textView.setBackgroundColor(Color.RED);
                break;
            case 101:
                textView.setBackgroundColor(Color.BLUE);
                break;
            case 102:
                textView.setBackgroundColor(Color.parseColor("#ff9933"));
                break;
            case 103:
                textView.setBackgroundColor(Color.WHITE);
                break;
            default:
                return super.onContextItemSelected(item);
        }
        return true;
    }
}
